﻿using Microsoft.AspNetCore.Mvc.Filters;
using System.Diagnostics;

namespace SP.User.WebApi.Filter
{
    public class SPWebActionFilter : Attribute, IAsyncActionFilter
    {
        private readonly ILogger<SPWebActionFilter> _logger;
        public SPWebActionFilter(ILogger<SPWebActionFilter> logger)
        {
            _logger = logger;
        }

        public Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            //判断当前方法上面有没有[NoLog]这个特性标注，有的话 则不记录日志信息
            if (context.ActionDescriptor.EndpointMetadata.Any(s => s.GetType() == typeof(NoLogAttribute)))
            {
                return next();
            }
            //Stopwatch这个类是一个秒表，可以统计所用的时间
            Stopwatch sw =new Stopwatch();
            sw.Start();//开始计时
            //要做的事情
            next();//调用action方法
            sw.Start();//停止计时
            long n = sw.ElapsedMilliseconds;//所用的毫秒数
            //拿到接口的路径
            string path = context.HttpContext.Request.Path;
            //还可以记录其他信息
            var message ="执行了"+context.HttpContext.Request.Path+"方法，用时" + n + "毫秒";
            _logger.LogInformation(message);
            return Task.CompletedTask;
        }
    }
}
